NuttX-6.5
---------

The 72nd release of NuttX, Version 6.5, was made on June 21, 2011
and is available for download from the SourceForge website. The
6.5 release is all about support for the Atmel 8-bit AVR family.
I have been interested in the AVR family for some time but because
of the severe SRAM constraints and because of the availability of
many tiny schedulers for the AVR, it has not been "on the radar
screen." However, I have recently become interested because of
interest expressed by members of the forum and because of the
availability of newer, larger capacity AVR parts (that I don't have
yet).

This release corresponds with SVN release number: r3730

This release includes support for the following AVR boards. As
with any initial support for new architectures, there are some
incomplete areas and a few caveats that need to be stated. Here
they are, ordered from the least to the most complete:

* SoC Robotics Amber Web Server (ATMega128).

This port of NuttX to the Amber Web Server from SoC Robotics
(http://www.soc-robotics.com/index.htm). Is only partially in
place. The Amber Web Server is based on an Atmel ATMega128
(128K FLASH but only 4K of SRAM).

STATUS: Work on this port has stalled due to toolchain issues. It
is complete, but untested.

* Micropendous 3 AT9USB647

This port of NuttX to the Opendous Micropendous 3 board. The
Micropendous3 may be populated with an AT90USB646, 647, 1286,
or 1287. See http://code.google.com/p/opendous/. I have only
the AT90USB647 version for testing. This version has very
limited memory resources: 64K of FLASH and 4K of SRAM.

STATUS: The basic port was released in NuttX-6.5. This basic
port consists only of a "Hello, World!!" example that demonstrates
initialization of the OS, creation of a simple task, and serial
console output. The tiny SRAM limits what you can do with the
AT90USB647 (see issues below).

* PJRC Teensy++ 2.0 AT9USB1286

This is a port of NuttX to the PJRC Teensy++ 2.0 board. This
board was developed by PJRC (http://pjrc.com/teensy/). The
Teensy++ 2.0 is based on an Atmel AT90USB1286 MCU with 128K
of FLASH and 8K of SRAM; a little more room to move than the
AT90USB647.

STATUS: The basic port was released in NuttX-6.5. This basic
port consists of a "Hello, World!!" example and also slightly
simplified NuttShell (NSH) configuration (see the NSH User Guide
at https://nuttx.apache.org/docs/latest/components/nsh/index.html).

An SPI driver and a USB device driver exist for the AT90USB as
well as a USB mass storage configuration. However, this
configuration is not fully debugged as of the NuttX-6.5 release.

AVR-specific issues. The basic AVR port is solid and biggest issue
for using AVR is its tiny SRAM memory and its Harvard architecture.
Because of the Harvard architecture, constant data that resides to
flash is inaccessible using "normal" memory reads and writes (only
SRAM data can be accessed "normally"). Special AVR instructions
are available for accessing data in FLASH, but these have not been
integrated into the normal, general purpose OS.

Most NuttX test applications are console-oriented with lots of
strings used for printf and debug output. These strings are all
stored in SRAM now due to these data accessing issues and even the
smallest console-oriented applications can quickly fill a 4-8K
memory. So, in order for the AVR port to be useful, one of two
things would need to be done:

1. Don't use console applications that required lots of strings.
The basic AVR port is solid and your typical deeply embedded
application should work fine.

2. Create a special version of printf that knows how to access
strings that reside in FLASH (or EEPROM).
